<?php

namespace app\home\controller;

use think\Controller;

class Cart extends Base
{
    //加入购物车   处理表单提交
    public function addCart()
    {
        // 接受数据
        $data=input();
        // dump($data);
        // 参数验证
        // 处理数据（登录和未登录）
        $this::cartdate($data['goods_id'],$data['goods_spec_id'],$data['goods_num']);
        // 先查询商品名称和logo
        $res=$this::getAllCart($data['goods_id'],$data['goods_spec_id'],$data['goods_num']);
        // $goods=\app\home\model\Goods::where('id',$data['goods_id'])->find();
        // // 查询商品规格
        // $goodsSpec=\app\home\model\SpecGoods::where('id',$data['goods_spec_id'])->find();
        // // 组合数据
        // $res=[
        //     'id'=>$goods['id'],
        //     'goods_name'=>$goods['goods_name'],
        //     'goods_logo'=>$goods['goods_logo'],
        //     'value_names'=>$goodsSpec['value_names'],
        //     'number'=>$data['goods_num']
        // ];
        // 展示页面
        return view('add_cart',['cartData'=>$res]);
    }
    // 展示购物车列表
    public function index()
    {
        if(session('user_info.id')){
            // 获取登录用户id
            $user_id=session('user_info.id');
            // 获取购物车表数据
            $cartgoods=\app\home\model\Cart::where('user_id',$user_id)->select();
            foreach($cartgoods as $v){
                $res[]=$this::getAllCart($v['goods_id'],$v['spec_goods_id'],$v['number'],$v['is_selected']);
            }
        }else{
            // 未登录  去cookie里面取
            $data=cookie('cart')?:[];
            // 转换成二维数组，去掉字符串下标
            $data=array_values($data);
            foreach($data as $v){
                $res[]=$this::getAllCart($v['goods_id'],$v['spec_goods_id'],$v['number'],$v['is_selected']);
            }
        }
        // dump($res);
        return view('index',['goodsList'=>$res]);
    }
    // 处理添加购物车的数据
    public static function cartdate($goods_id,$goods_spec_id,$number,$is_selected=1)
    {
        // 登录和未登录
        if(session('user_info')){
            $user_id=session('user_info.id');
            // 已登录
            // 判断是否存在购物记录（用户id  商品id 商品规格id 相同）
            // 判断条件
            $where=[
                'user_id'=>$user_id,
                'goods_id'=>$goods_id,
                'spec_goods_id'=>$goods_spec_id
            ];
            $info=\app\home\model\Cart::where($where)->find();
            if($info){
            // 如果存在  更新数据表
            // 存在相同记录，更新数量
            $info->number=$number;
            $info->is_selected=$is_selected;
            $info->save();
            }else{
                // 否则 插入数据
                $where['number']=$number;
                $where['is_selected']=$is_selected;
                \app\home\model\Cart::create($where,true);
            }
        }else{
            // 未登录  数据cookie或者session 或者缓存
            // 先从cookie中取出数据
            $data=cookie('cart')?:[];
            // 判断是否存在购物记录（商品id  商品规格id  相同）
            $key=$goods_id."_".$goods_spec_id;
            if(isset($data[$key])){
                // 存在相同记录， 更新数据
                $data[$key]['number']=$number;
                $data[$key]['is_selected']=$is_selected;
            }else{
                // 否则  保存数据  存到cookie
                $data[$key]=[
                    'goods_id'=>$goods_id,
                    'spec_goods_id'=>$goods_spec_id,
                    'number'=>$number,
                    'is_selected'=>$is_selected
                ];
                cookie('cart',$data,24*3600);
            }
        }
    }
    // 查询购物车数据
    public static function getAllCart($goods_id,$goods_spec_id,$goods_num,$is_selected=1)
    {
         // 先查询商品名称和logo
         $goods=\app\home\model\Goods::where('id',$goods_id)->find();
         // 查询商品规格
         $goodsSpec=\app\home\model\SpecGoods::where('id',$goods_spec_id)->find();
         // 组合数据
         $res=[
             'id'=>$goods['id'],
             'goods_name'=>$goods['goods_name'],
             'goods_logo'=>$goods['goods_logo'],
             'value_names'=>$goodsSpec['value_names'],
             'number'=>$goods_num,
             'price'=>$goodsSpec['price'],
             'is_selected'=>$is_selected
         ];
         return $res;
    }
    // 将cookie里面的购物车数据迁移到数据表
    public static function cookieToTable()
    {
        // 从cookie中取数据
        $data=cookie('cart')?:[];
        // 将数据添加或者修改到数据表
        foreach($data as $v){
            self::cartdate($v['goods_id'],$v['spec_goods_id'],$v['number']);
        }
        // 删除cookie
        cookie('cart',null);
    }
}
